{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "7qmyIyQ3PgNu"
      },
      "source": [
        "# Toy example to demonstrate the importance of the repulsive term in the energy distance\n",
        "This notebook reproduces Figure 1 from *A Spectral Energy Distance for Parallel Speech Synthesis* ([https://arxiv.org/abs/2008.01160](https://arxiv.org/abs/2008.01160)). In this paper we use a spectrogram-based generalization of the *Energy Distance* ([wikipedia](https://en.wikipedia.org/wiki/Energy_distance)), which is a proper scoring rule for fitting generative models. The squared energy distance is given by $D^{2}[p|q] = 2\\mathbb{E}_{\\mathbf{x} \\sim p, \\mathbf{y} \\sim q}||\\mathbf{x} - \\mathbf{y}||_{2} - \\mathbb{E}_{\\mathbf{x},\\mathbf{x'} \\sim p}||\\mathbf{x} - \\mathbf{x'}||_{2} - \\mathbb{E}_{\\mathbf{y},\\mathbf{y'} \\sim q}||\\mathbf{y} - \\mathbf{y'}||_{2}$. When $p$ is our data distribution and $q$ our model distribution this simplifies to a training loss given by $L[q] = 2\\mathbb{E}_{\\mathbf{x} \\sim p, \\mathbf{y} \\sim q}||\\mathbf{x} - \\mathbf{y}||_{2} - \\mathbb{E}_{\\mathbf{y},\\mathbf{y'} \\sim q}||\\mathbf{y} - \\mathbf{y'}||_{2}$. The first term here *attracts* the model samples $\\mathbf{y}$ towards the data samples $\\mathbf{x}$, while the second term *repels* independent model samples $\\mathbf{y}, \\mathbf{y'}$ away from each other. In this notebook we estimate 2 simple toy models with and without using this repulsive term to demonstrate its importance."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "llATO9tJkgP-"
      },
      "source": [
        "## Imports"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {},
        "colab_type": "code",
        "id": "l7vXnbkgV8Nu"
      },
      "outputs": [],
      "source": [
        "import numpy as np\n",
        "from scipy.optimize import minimize\n",
        "import functools\n",
        "import matplotlib.pyplot as plt\n",
        "import palettable"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "ZJOc7HKryw6R"
      },
      "source": [
        "## This is the energy distance loss"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {},
        "colab_type": "code",
        "id": "y4PObq1bywUs"
      },
      "outputs": [],
      "source": [
        "def loss(param, sample_from_param_fun, real_data, repulsive_term = True):\n",
        "  \"\"\" Energy Distance loss function for training a generative model.\n",
        "  Inputs:\n",
        "    param: parameters of a generative model\n",
        "    sample_from_param_fun: function that produces a set of samples from the model for given parameters\n",
        "    real_data: training data\n",
        "    repulsive_term: whetther to include the repulsive term in the loss or not\n",
        "  Output:\n",
        "    A scalar loss that can be minimized to fit our model to the data\n",
        "  \"\"\"\n",
        "  sample = sample_from_param_fun(param)\n",
        "  d_real_fake = np.sqrt(np.sum(np.square(sample - real_data), axis=1))\n",
        "  perm = np.random.RandomState(seed=100).permutation(sample.shape[0])\n",
        "  sample2 = sample[perm] # we randomly match up independently generated samples\n",
        "  d_fake_fake = np.sqrt(np.sum(np.square(sample - sample2), axis=1))\n",
        "  l = 2. * np.mean(d_real_fake)\n",
        "  if repulsive_term:\n",
        "    l -= np.mean(d_fake_fake)\n",
        "  return l"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "r0xW2K7gcsPB"
      },
      "source": [
        "## Fitting a high dimensional Gaussian using energy distance, with and without using a repulsive term\n",
        "We fit a high dimensional Gaussian model to training data generated from a distribution in the same model class. We show samples from the model trained by minimizing the energy distance (blue) or the more commonly used loss without repulsive term (green), and compare to samples from the training data (red). Samples from the energy distance trained model are representative of the data, and all sampled points lie close to training examples. Samples from the model trained without repulsive term are not typical of training data."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {},
        "colab_type": "code",
        "id": "zFecwWAzcpwY"
      },
      "outputs": [],
      "source": [
        "n = 10000\n",
        "dim = 100\n",
        "def sample_from_param(param, z):\n",
        "  mu = param[:-1]\n",
        "  log_sigma = param[-1]\n",
        "  sigma = np.exp(log_sigma)\n",
        "  mu = np.reshape(mu, [1, dim])\n",
        "  return mu + sigma * z\n",
        "\n",
        "z_optim = np.random.normal(size=(n, dim))\n",
        "sample_from_param_partial = functools.partial(sample_from_param, z=z_optim)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {},
        "colab_type": "code",
        "id": "dNmuQ-EDylDU"
      },
      "outputs": [],
      "source": [
        "# real data\n",
        "real_param = np.zeros(dim+1)\n",
        "real_data = sample_from_param(real_param, np.random.normal(size=(n, dim)))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {},
        "colab_type": "code",
        "id": "FqYpb1QoeGqY"
      },
      "outputs": [],
      "source": [
        "# with energy distance\n",
        "res = minimize(loss,\n",
        "               np.zeros(dim + 1),\n",
        "               args=(sample_from_param_partial, real_data, True),\n",
        "               method='BFGS',\n",
        "               tol=1e-10)\n",
        "sample_ged = sample_from_param_partial(res.x)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {},
        "colab_type": "code",
        "id": "jp1dkkpjf0pL"
      },
      "outputs": [],
      "source": [
        "# without repulsive\n",
        "res = minimize(loss,\n",
        "               np.zeros(dim + 1),\n",
        "               args=(sample_from_param_partial, real_data, False),\n",
        "               method='BFGS',\n",
        "               tol=1e-10)\n",
        "sample_naive = sample_from_param_partial(res.x)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "height": 287
        },
        "colab_type": "code",
        "executionInfo": {
          "elapsed": 459,
          "status": "ok",
          "timestamp": 1596626729566,
          "user": {
            "displayName": "",
            "photoUrl": "",
            "userId": ""
          },
          "user_tz": -120
        },
        "id": "MczrHWsUfmo1",
        "outputId": "1ae3b17a-781c-4697-af45-c724b5d2a37a"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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\nmeTSlkQikZQ1S/fEs2xvPA5V4ONuYOy9DagdYKloscoNOSORSCSSMuR0ipVfd59xzkTSrAXM3XS8\ngqUqX6QikUgkkjLk2LmsInlnLuRQYC85TEJVRioSiUQiKUNq+xddwgrxMWPQ3bqP21t3ZJIqT0pK\nCoqisHHjRgBOnjyJoiiltraVSCqC2gEWet8RjOaiizeLSceQu+pUrFDljFQkVZChQ4c6HRxe+WnX\nrl1Fi1au1KhRg8TERJo3b16q8rVq1WL69OnlLJVEUpQB7cKY/lhLJveN4OPHW1G/umdFi1SuyFNb\nVZQePXowb55rAK1LLtLLC7vdjlarveFYImWFVqslKCioQvqWSG4UX4sRX4uxosX4R5AzkiqK0Wgk\nKCjI5ePr6+u8rigKs2fPpn///ri7u1OnTh2+//57lzYSEhIYNGgQPj4++Pj40KdPH2JjY53X33jj\nDZo0acK3335L3bp1MRqNWK1WrFYrTz31FBaLhcDAQN59913uv/9+hg4dCsBbb71FkyZNisjcsWNH\nxo4de80x7dq1i1atWmEymWjRogU7d+50uX710pbNZmPs2LEEBwdjNBqpUaMGEydOBKBLly6cOnWK\nCRMmuLinT01NZfDgwYSGhmI2m4mIiOCbb75x6adLly4899xzTJ48GX9/fwICAhg/frxLTPmCggIm\nT55MWFgYRqOROnXq8OmnnzqvR0VF0adPHzw8PAgICGDw4MEkJSVdc+wSSVVGKpIywGZX2XkshXWH\nk7iQXXK0wX+St956i379+nHgwAEGDhzIsGHDOHXqFAA5OTl07doVk8nEpk2b2L59O9WrV6dHjx7k\n5OQ424iLi2PBggUsXryYAwcOYDKZePHFF9m0aRO//vor69ev58CBA2zZssVZZ9iwYcTExLgEqzpy\n5Ah//vknzzxTfKwWq9VKnz59qFOnDrt37+a9995j/PjxJY7v008/5ddff2XRokXExsbyww8/0KBB\nAwB++eUXQkNDee2110hMTCQxMRGAvLw8WrZsyfLlyzl8+DDjxo1j5MiRrFu3zqXt+fPno9Pp+PPP\nP5k5cyYzZszghx9+cF4fMmQI3333HR999BHR0dF8/fXXeHt7A4Vhezt37kyTJk2IjIzkjz/+IDs7\nm759+7ooI0nFI1SV3FWryHjvfawLF6FmZ1e0SFWT8ggaX9koKYh9VFTUTbWdm28XUxbvF0O+/FMM\n+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\nSUVORK5CYII=\n",
            "text/plain": [
              "\u003cFigure size 600x400 with 1 Axes\u003e"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "def data_to_xy(sample):\n",
        "  sample = sample[:100]\n",
        "  x = np.sqrt(np.mean(np.square(sample), axis=1))\n",
        "  y = np.mean(sample, axis=1)\n",
        "  return (x,y)\n",
        "\n",
        "data = (data_to_xy(real_data), data_to_xy(sample_ged), data_to_xy(sample_naive))\n",
        "colors = palettable.colorbrewer.qualitative.Set1_3.mpl_colors\n",
        "groups = (\"Training data\", \"Energy distance\", \"No repulsive term\")\n",
        "\n",
        "fig = plt.figure()\n",
        "ax = fig.add_subplot(1, 1, 1)\n",
        "\n",
        "for data, color, group in zip(data, colors, groups):\n",
        "  x, y = data\n",
        "  ax.scatter(x, y, alpha=0.8, c=color, edgecolors='none', s=30, label=group)\n",
        "\n",
        "plt.legend(loc='best', fontsize=14)\n",
        "plt.xlabel('Sample norm', fontsize=14)\n",
        "plt.ylabel('Sample mean', fontsize=14)\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "Cc67BgeFwhra"
      },
      "source": [
        "## Fitting a mixture of 3 Gaussians in 2d\n",
        "We fit a mixture of 3 Gaussians in 2d to training data generated from a distribution in the same model class. We show samples from the model trained by minimizing the energy distance (blue) or the more commonly used loss without repulsive term (green), and compare to samples from the training data (red). Samples from the energy distance trained model are representative of the data, and all sampled points lie close to training examples. Samples from the model trained without repulsive term are not typical of training data."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {},
        "colab_type": "code",
        "id": "gSpmXaFiwe_r"
      },
      "outputs": [],
      "source": [
        "n = 10000\n",
        "def sample_from_param(param, z, perm):\n",
        "  params = np.split(param, 3)\n",
        "  means = [np.reshape(p[:2], [1,2]) for p in params]\n",
        "  sigmas = [np.exp(p[2]) for p in params]\n",
        "  samples = [m + s*zi for m,s,zi in zip(means, sigmas, z)]\n",
        "  samples = np.concatenate(samples, axis=0)[perm]\n",
        "  return samples\n",
        "\n",
        "z_optim = np.split(np.random.normal(size=(n, 6)), 3, axis=1)\n",
        "perm_optim = np.random.permutation(3*n)\n",
        "sample_from_param_partial = functools.partial(sample_from_param,\n",
        "                                              z=z_optim,\n",
        "                                              perm=perm_optim)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {},
        "colab_type": "code",
        "id": "22R7StpEzhtu"
      },
      "outputs": [],
      "source": [
        "# real data\n",
        "real_param = np.array([-10., 0., 0., 10., 0., 0., 0., np.sqrt(300.), 0.])\n",
        "z_real = np.split(np.random.normal(size=(n, 6)), 3, axis=1)\n",
        "perm_real = np.random.permutation(3*n)\n",
        "real_data = sample_from_param(real_param, z=z_real, perm=perm_real)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {},
        "colab_type": "code",
        "id": "Qd6A9x96zht1"
      },
      "outputs": [],
      "source": [
        "# with energy distance\n",
        "res = minimize(loss,\n",
        "               np.zeros(9),\n",
        "               args=(sample_from_param_partial, real_data, True),\n",
        "               method='BFGS',\n",
        "               tol=1e-10)\n",
        "sample_ged = sample_from_param_partial(res.x)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {},
        "colab_type": "code",
        "id": "2ArgfWpnzht6"
      },
      "outputs": [],
      "source": [
        "# without repulsive\n",
        "res = minimize(loss,\n",
        "               np.zeros(9),\n",
        "               args=(sample_from_param_partial, real_data, False),\n",
        "               method='BFGS',\n",
        "               tol=1e-10)\n",
        "sample_naive = sample_from_param_partial(res.x)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "height": 287
        },
        "colab_type": "code",
        "executionInfo": {
          "elapsed": 827,
          "status": "ok",
          "timestamp": 1596626738524,
          "user": {
            "displayName": "",
            "photoUrl": "",
            "userId": ""
          },
          "user_tz": -120
        },
        "id": "67wC5OQBzht-",
        "outputId": "35e8b4ee-7729-4d8a-bd8d-fcb6055dd45c"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "\u003cFigure size 600x400 with 1 Axes\u003e"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "def data_to_xy(sample):\n",
        "  sample = sample[:100]\n",
        "  x,y = np.split(sample,2,axis=1)\n",
        "  return (x,y)\n",
        "\n",
        "data = (data_to_xy(real_data), data_to_xy(sample_ged), data_to_xy(sample_naive))\n",
        "colors = palettable.colorbrewer.qualitative.Set1_3.mpl_colors\n",
        "groups = (\"Training data\", \"Energy distance\", \"No repulsive term\")\n",
        "\n",
        "fig = plt.figure()\n",
        "ax = fig.add_subplot(1, 1, 1)\n",
        "\n",
        "for data, color, group in zip(data, colors, groups):\n",
        "  x, y = data\n",
        "  ax.scatter(x, y, alpha=0.8, c=color, edgecolors='none', s=30, label=group)\n",
        "\n",
        "plt.legend(loc='best', fontsize=14)\n",
        "plt.xlabel('$x_1$', fontsize=14)\n",
        "plt.ylabel('$x_2$', fontsize=14)\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "s05OY9pkklSM"
      },
      "source": [
        "## Copyright\n",
        "\n",
        "Copyright 2020 The Google Research Authors.\n",
        "\n",
        "Licensed under the Apache License, Version 2.0 (the \"License\");\n",
        "you may not use this file except in compliance with the License.\n",
        "You may obtain a copy of the License at\n",
        "\n",
        "    http://www.apache.org/licenses/LICENSE-2.0\n",
        "\n",
        "Unless required by applicable law or agreed to in writing, software\n",
        "distributed under the License is distributed on an \"AS IS\" BASIS,\n",
        "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
        "See the License for the specific language governing permissions and\n",
        "limitations under the License."
      ]
    }
  ],
  "metadata": {
    "colab": {
      "collapsed_sections": [],
      "last_runtime": {
        "build_target": "//learning/deepmind/dm_python:dm_notebook3",
        "kind": "private"
      },
      "name": "toy_ged.ipynb",
      "provenance": [
        {
          "file_id": "1-oAfqJ6IIpZ-jhP2JwxD-7YHdpGomx5r",
          "timestamp": 1590434907219
        }
      ]
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
